package com.ccc.test.mqtt.util;

import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.ccc.test.mqtt.pojo.PointData;
import com.ccc.test.mqtt.pojo.SensorData;

import java.util.ArrayList;
import java.util.List;

/**
 * 报文转换工具类
 *
 * @author superC
 * @version 1.0.0
 * @date 2023/7/11
 */

public class MsgUtils {

    /**
     *
     *  报文转换
     *
     * 报文传输数据格式：
     *      01 xx xx {"519579":"x1,x2,x3,x4,x5…" }
     *  说明：
     *      01：类型
     *      Xx xx：数据长度
     *      519579：设备ID
     *      X1,x2,x3…：128点数据，一个点有速度和高度两个数据组成，安升序排列，数据为字符形式表示，128点共128*2=256个数据，
     *
     * @date 2023/7/11 10:52
     * @param msg:
     * @return {@link SensorData}
     * @author superC
     */
    public static SensorData msgConvert(String msg) {
        SensorData sensorData = new SensorData();
        // 用空格间隔
        String[] arr = msg.split(" ");
        if (arr.length == 4) {
            List<PointData> list = new ArrayList<>();
            sensorData.setType(arr[0]);
            // 数据长度

            String dataStr = arr[3];
            JSONObject jsonObject = JSONUtil.parseObj(dataStr);
            jsonObject.keySet().forEach(key -> {
                sensorData.setDeviceId(key);
                String pointStr = jsonObject.getStr(key);
                String[] pointArr = pointStr.split(",");
                if (pointArr.length == 256) {
                    for (int i = 0; i < 256; i += 2) {
                        PointData pointData = new PointData();
                        pointData.setSpeed(pointArr[i]);
                        pointData.setHeight(pointArr[i + 1]);
                        list.add(pointData);
                    }
                }
            });
            sensorData.setPoints(list);
        }
        return sensorData;
    }

}
